package ivansalvadori.diariopushweb.view.usuario.insert;

import ivansalvadori.diariopushweb.model.Usuario;
import ivansalvadori.diariopushweb.service.UsuarioService;
import ivansalvadori.diariopushweb.view.HomePage;
import ivansalvadori.diariopushweb.view.security.MySession;
import ivansalvadori.diariopushweb.view.termo.GerenciadorTermo;

import javax.xml.bind.ValidationException;

import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

@SuppressWarnings("serial")
public class InserirUsuarioForm extends Form<Usuario> {

	@SpringBean
	private UsuarioService usuarioService;

	private PasswordTextField campoSenha;
	private PasswordTextField campoConfirmacaoSenha;

	public InserirUsuarioForm(Usuario usuario) {
		super("usuarioForm");
		IModel<Usuario> model = new CompoundPropertyModel<Usuario>(usuario);
		this.setModel(model);

		RequiredTextField<String> campoNome = new RequiredTextField<String>("nome");
		add(campoNome);

		RequiredTextField<String> campoEmail = new RequiredTextField<String>("email");
		add(campoEmail);

		campoSenha = new PasswordTextField("senha");
		add(campoSenha);

		campoConfirmacaoSenha = new PasswordTextField("confirmacaoSenha");
		add(campoConfirmacaoSenha);

		RequiredTextField<String> campoCidade = new RequiredTextField<String>("cidade");
		add(campoCidade);

		RequiredTextField<String> campoEstado = new RequiredTextField<String>("estado");
		add(campoEstado);

		Link<GerenciadorTermo> link1 = new Link<GerenciadorTermo>(
				"cancelarCadastro") {
			@Override
			public void onClick() {
				setResponsePage(HomePage.class);
			}
		};

		add(link1);

	}

	@Override
	protected void onValidateModelObjects() {
		// TODO Auto-generated method stub
		super.onValidateModelObjects();

		if(!campoSenha.getModelObject().equals(campoConfirmacaoSenha.getModelObject())){
			error("Senha diferente da Confirmação.");
		}
	}

	@Override
	public final void onSubmit() {
		try{
			Usuario u = this.getModelObject();

			int codigo = usuarioService.inserir(this.getModelObject());
			u.setCodigo(codigo);

			MySession session = (MySession) getSession();
			session.setUsuario(u);

			setResponsePage(GerenciadorTermo.class);

		}
		catch (ValidationException e) {
			error(e.getMessage());
		}
	}

}
